using System.Data.Entity.ModelConfiguration;

namespace SecondLevelCaching.Data.Models.Mapping
  {
      public class OrderMap : EntityTypeConfiguration<Order>
      {
          public OrderMap()
          {
              // Primary Key
              this.HasKey(t => t.OrderID);
  
              // Properties
              this.Property(t => t.CustomerID)
                  .IsFixedLength()
                  .HasMaxLength(5);
  
              this.Property(t => t.ShipName)
                  .HasMaxLength(40);
  
              this.Property(t => t.ShipAddress)
                  .HasMaxLength(60);
  
              this.Property(t => t.ShipCity)
                  .HasMaxLength(15);
  
              this.Property(t => t.ShipRegion)
                  .HasMaxLength(15);
  
              this.Property(t => t.ShipPostalCode)
                  .HasMaxLength(10);
  
              this.Property(t => t.ShipCountry)
                  .HasMaxLength(15);
  
              // Table & Column Mappings
              this.ToTable("Orders");
              this.Property(t => t.OrderID).HasColumnName("OrderID");
              this.Property(t => t.CustomerID).HasColumnName("CustomerID");
              this.Property(t => t.EmployeeID).HasColumnName("EmployeeID");
              this.Property(t => t.OrderDate).HasColumnName("OrderDate");
              this.Property(t => t.RequiredDate).HasColumnName("RequiredDate");
              this.Property(t => t.ShippedDate).HasColumnName("ShippedDate");
              this.Property(t => t.ShipVia).HasColumnName("ShipVia");
              this.Property(t => t.Freight).HasColumnName("Freight");
              this.Property(t => t.ShipName).HasColumnName("ShipName");
              this.Property(t => t.ShipAddress).HasColumnName("ShipAddress");
              this.Property(t => t.ShipCity).HasColumnName("ShipCity");
              this.Property(t => t.ShipRegion).HasColumnName("ShipRegion");
              this.Property(t => t.ShipPostalCode).HasColumnName("ShipPostalCode");
              this.Property(t => t.ShipCountry).HasColumnName("ShipCountry");
  
              // Relationships
              this.HasOptional(t => t.Customer)
                  .WithMany(t => t.Orders)
                  .HasForeignKey(d => d.CustomerID);
              this.HasOptional(t => t.Employee)
                  .WithMany(t => t.Orders)
                  .HasForeignKey(d => d.EmployeeID);
              this.HasOptional(t => t.Shipper)
                  .WithMany(t => t.Orders)
                  .HasForeignKey(d => d.ShipVia);
  
          }
      }
  }